home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / blckade.exe / BLOCKADE.DOC < prev    next >
Encoding:
Text File  |  1992-10-23  |  26.7 KB  |  991 lines

  1.     
  2.     
  3.     
  4.     
  5.     
  6.     
  7.     
  8.     
  9.     
  10.     
  11.     
  12.     
  13.     
  14.                               BLOCKADE (TM)
  15.                     A self checker library for C programs
  16.     
  17.     
  18.     
  19.     
  20.     
  21.     
  22.                     Copyright (C) 1991,92 Indusoft Corp.
  23.     
  24.     
  25.     
  26.     
  27.     
  28.     
  29.     
  30.     
  31.                            Indusoft Corp.
  32.                            PO. Box 26747
  33.                        Greenville, SC 29616-1747
  34.     
  35.     
  36.     
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -1-
  59.  
  60.     
  61.     
  62.     
  63.     
  64.     
  65.          OVERVIEW
  66.     
  67.          Blockade is a function library for C programmers which allows
  68.          your C programs to protect themselves against unauthorized
  69.          changes. Virus protection IMMEDIATELY comes to mind as its main
  70.          use, but there are more.
  71.     
  72.          I wrote BLOCKADE so that programs I wrote could check
  73.          themselves. Have you had those times too?  Those unexplainable
  74.          times when a program runs but has some odd behavior that makes
  75.          you suspect corruption, virus related or not.
  76.     
  77.          This happened to me when I was checking out a disk caching
  78.          utility. Files I had compiled and linked often quit running
  79.          after copying them to another disk or subdirectory. The
  80.          combination of controller, BIOS, and cache software was
  81.          causing just a few bytes of a file to be altered anytime I
  82.          copied it (and of course without warning or notice).
  83.     
  84.          After several hours of searching, I found the problem and
  85.          looked for a way to make my programs self checking. The result
  86.          was BLOCKADE.
  87.     
  88.          BLOCKADE checks every byte of your EXE or COM to insure that
  89.          changes are detected. Its algorithm is designed to be effective
  90.          but fast enough allow use in your programs.
  91.     
  92.          I also use BLOCKADE in my products to protect against
  93.          unauthorized patches to my programs and to protect my
  94.          customers from running versions of the program damaged
  95.          unintentionally.
  96.     
  97.          Blockade is easy to use.  1 major function analyses your EXE
  98.          file and returns a status code indicating whether your file has
  99.          been altered.
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -2-
  118.  
  119.     
  120.     
  121.     
  122.     
  123.          NEAT FEATURES
  124.     
  125.          * Fast operation. A 40k EXE file can check itself in less
  126.            than 3 seconds on a 12 MHZ AT.
  127.     
  128.          * Ease of use.  A few #includes and only a handful
  129.            of additions are needed to use BLOCKADE. No changes to
  130.            your program's basic structure are necessary.
  131.     
  132.          * Ability to add user data to a program "skeleton".
  133.            useful for adding customer names and serial numbers.
  134.          
  135.          * Expandable.  BLOCKADE can be modified to extend the
  136.            number and type checking methods you use.
  137.            The source code to BLOCKADE is available, allowing you to
  138.            create new checking methods unique to your application.
  139.     
  140.          
  141.          THEORY OF OPERATION
  142.     
  143.     
  144.          Blockade works via 2 pieces of code you add to your program.
  145.     
  146.          (1)  A special data structure "SIGNATUR.H", which is #include'd
  147.               in your program.  The structure reserves room for the
  148.               information BLOCKADE will need to analyze your program.
  149.     
  150.          (2)  The function blockade(), which checks your program for
  151.               alteration.
  152.     
  153.          After linking, a special program (BRAND.EXE) is run to find the
  154.          special string included by "SIGNATUR.H" in the data area of
  155.          your EXE file, calculate the checking information and overwrite
  156.          that area with the data blockade() needs to detect changes to
  157.          your file.  Once branded, your program can check itself for
  158.          changes each time it is run.
  159.     
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -3-
  177.  
  178.     
  179.     
  180.     
  181.     
  182.          I HAVE TO RUN BRAND.EXE  EACH TIME I RELINK MY APPLICATION ?
  183.     
  184.     
  185.          That's the problem I had with other products similar to
  186.          BLOCKADE. The biggest headache was time - it seemed to take
  187.          forever for them to calculate and update my program.
  188.     
  189.          To combat that, ALOT of time went into the all the utilities to
  190.          make things FAST.  For example, on an 8 MHz AT, the Brand
  191.          utility will analyze and brand a 40 K .EXE file in less than 4
  192.          seconds.
  193.     
  194.          The same thing is true for your developed applications. Nobody
  195.          wants to wait 30-40 seconds every time they start your program
  196.          while it self checks.  The check algorithm in BLOCKADE is quick.
  197.          Running from a hard disk, I doubt anyone will notice the delay.
  198.     
  199.          I leave the BLOCKADE code linked in during development - to
  200.          take into account the effect it has on speed and memory use -
  201.          but have the program ignore any error codes until my final
  202.          production link.
  203.     
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -4-
  236.  
  237.     
  238.     
  239.     
  240.          CONTENTS
  241.     
  242.     
  243.          This self extracting file should contain at least the following files:
  244.     
  245.     
  246.          blkade1.c       - the error message function used by BLOCKADE.
  247.          blkdmoms.lib    - Blockade demo library Microsoft 5.1 (Small model)
  248.          blkdmoml.lib    - Blockade demo library Microsoft 5.1 (Large model)
  249.          blkdmots.lib    - Blockade demo library Turbo C 2.01 (Small model)
  250.          blkdmotl.lib    - Blockade demo library Turbo C 2.01 (Large model)
  251.          blkdmobs.lib    - Blockade demo library Borland C++ 2.0 (Small model)
  252.          blkdmobl.lib    - Blockade demo library Borland C++ 2.0 (Large model)
  253.          brand.exe       - calculates your program's checkcode data
  254.                            and "brands" it into your .EXE file.
  255.          demo.c          - Demonstrates use of the Blockade function library.
  256.          demo.exe        - Demo program demonstrating BLOCKADE's use.
  257.          demo.mak        - Microsoft C make file for DEMO.EXE.
  258.          rundemo.bat     - Demonstrates use of the Blockade system.
  259.          mksig.exe       - Generates a SIGNATUR.H file.
  260.          signatur.h      - include file to be embedded in your program.
  261.          blkproto.h      - function prototypes for blockade functions.
  262.          userdata.dat    - a sample user data file used with DEMO.EXE.
  263.          read.me         - any last minute info.
  264.     
  265.          The file BLKDEMO.PAK is an ASCII file listing the exact files
  266.          in this distribution.
  267.     
  268.     
  269.          
  270.          COMPILER'S SUPPORTED
  271.          
  272.          The test drive of BLOCKADE version comes with libraries for
  273.          Turbo C 2.0, Borland C++ 2.0 and Microsoft C 5.x.  I don't know
  274.          if these are usable with Microsoft 6.0.  According to Borland,
  275.          the C++ libraries are NOT reliably usable with Turbo C 2.0.
  276.          However, Turbo C++ and Borland C++ libraries do seem to be
  277.          compatible.
  278.     
  279.          For now, folks with other C compilers must license the source
  280.          code and compile it themselves.  BLOCKADE and all it's support
  281.          programs are written in (almost) ANSI C so things should
  282.          compile up just fine.
  283.          
  284.          The libraries were compiled with the following options.
  285.     
  286.          For TC   :   tc  -O -G -c  -ml(or s)
  287.     
  288.          For BCC  :   bcc -O -G -c  -ml(or s)
  289.     
  290.          For MSC  :   CL /W3 /Ox /Zi  /c /AL(or S)
  291.  
  292.  
  293.  
  294.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -5-
  295.  
  296.     
  297.     
  298.     
  299.          Below is an short program illustrating the BLOCKADE system.
  300.          (This is in fact a section of the DEMO program included in your
  301.          BLOCKADE package)
  302.     
  303.     
  304.     
  305.     
  306.          /* ------------------------------------------- */
  307.     
  308.          #include "blkproto.h"   /* function prototypes              */
  309.          #include "signatur.h"   /* holds the signature string       */
  310.     
  311.          /* ------------------------------------------- */
  312.     
  313.          main(int argc, char **argv)
  314.          {
  315.            char *sp;
  316.            int stat;
  317.     
  318.            printf("Checking myself for changes..\n");
  319.     
  320.            stat = blockade( argv[0], 8000);
  321.     
  322.            printf ("Results of file self check = %d\n", stat);
  323.     
  324.            sp = get_blk_err_msg( stat);
  325.            printf("The status my self check was \"%s\". \n", sp);
  326.     
  327.            return(0);
  328.          }
  329.     
  330.     
  331.          The above example illustrates how easy it is to add self
  332.          checking to your programs.
  333.     
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -6-
  354.  
  355.     
  356.     
  357.     
  358.     
  359.          Prototype :
  360.     
  361.            int blockade( const char *filename, int buffer_size);
  362.     
  363.     
  364.          Description:
  365.     
  366.          Attempts to open "filename" and analyze it for any alterations.
  367.     
  368.          Allocates "buffer_size"  bytes of dynamic memory for disk I/O
  369.          to improve scanning performance.  Allowable buffer sizes are
  370.          from 512 to approximately 30000 bytes inclusive.  Buffer
  371.          sizes outside this range are set to the closest allowable size
  372.          within the function.
  373.     
  374.          Returns 0 if no changes are detected, else returns a non-zero
  375.          status indicating the reason for failure.  The user's
  376.          application must decide what action to take based on the
  377.          status.
  378.     
  379.     
  380.          Example:
  381.     
  382.     
  383.             include "signatur.h"
  384.             stat = blockade( "DEMO.EXE", 1024);
  385.             if (status != 0)
  386.                {
  387.                  printf(" This file has be altered !!!\n");
  388.                }
  389.     
  390.             Attempts to open DEMO.EXE located int the current directory
  391.             and analyzes it for any changes.  Allocates 1024 bytes of
  392.             dynamic memory for disk I/O to speed things along.
  393.     
  394.             Prints an error message if any alteration if found.
  395.     
  396.             Note: Although the above example if perfectly legal, it is 
  397.             better to use arg[0] rather than a hard coded program name.
  398.             The program's real name is the only one which will work 
  399.             anyway. Arg[0] provides this in all DOS versions 3.0 and 
  400.             above.
  401.     
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -7-
  413.  
  414.     
  415.     
  416.     
  417.          Prototype :
  418.     
  419.            char *get_blk_err_msg( int status );
  420.     
  421.     
  422.          Description:
  423.     
  424.            Returns a READ ONLY pointer to a message relating to
  425.            the "status" code.  This message can then be used to explain
  426.            or document the error to the user.
  427.     
  428.            NOTE: The pointed to string must not be modified.
  429.                  Unpredictable operation may result if modification
  430.                  takes place. Make a copy of this string if you intend
  431.                  to alter it.
  432.     
  433.     
  434.     
  435.          Example:
  436.     
  437.             {
  438.             int status;
  439.     
  440.             status = blockade( arg[0] ,  0);
  441.             if (status != 0)
  442.                {
  443.                  sp = get_blk_err_msg(stat);
  444.                  printf( "%s\n", sp );
  445.                }
  446.             return(status);
  447.             }
  448.     
  449.     
  450.             Attempts to open MYSELF.EXE located in subdirectory
  451.             C:\BLOCK\BIN and analyze it for any changes.
  452.     
  453.             Since 0 bytes (less than the minimum) were specified for
  454.             buffer, the minimum (BLKSIZ bytes) is used for disk
  455.             buffering.
  456.     
  457.             Prints an error message if any alteration if found or if
  458.             file cannot be successfully opened and analyzed.
  459.     
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -8-
  472.  
  473.     
  474.     
  475.          
  476.          Prototype:
  477.     
  478.            void * blk_user_pointer( int *size )
  479.          
  480.     
  481.          Description:
  482.     
  483.            Returns a void pointer to the first char of the user area,
  484.            and the size of that region.
  485.          
  486.            Use this pointer with its associated size to access your 
  487.            user data inserted when you branded your program.
  488.          
  489.            Returns NULL if no user area specified.
  490.          
  491.            NO checks are made to make sure you actually LOADED the user
  492.            area with data when you branded the program.
  493.     
  494.            Note that your user data can be anytihng, a string, or
  495.            binary data. It is up to you to cast or map it into the
  496.            format you need to use. 
  497.         
  498.          Example:
  499.     
  500.           {
  501.              char *sp;
  502.              void *vp;
  503.              int k, size;
  504.     
  505.              vp =  blk_user_pointer(  &size );    /* Find user string.*/
  506.              sp = (char *) vp;                    /* Cast to char *.  */
  507.              for (k = size; k >= 0 && *sp; k--)   /* Print out the    */
  508.                {                                  /* entire string.   */
  509.                  putch(*sp);
  510.                  sp++;
  511.                }
  512.             }
  513.     
  514.          See demo.c for another example of its use.
  515.     
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -9-
  531.  
  532.     
  533.     
  534.     
  535.          MKSIG.EXE
  536.     
  537.          "Writes" an include which includes the references and data
  538.          space Blockade needs for operation.  You do not need to run
  539.          MKSIG.EXE unless you wish to change either the reserved data
  540.          size or signature string. However, there's no harm done if
  541.          you do.
  542.     
  543.          MKSIG's syntax is as follows :
  544.     
  545.          MKSIG <"Signature string">   </o>  </us>  </c>
  546.     
  547.          "signature string"
  548.             The text BRAND.EXE should search for to locate Blockade's
  549.             data space. The default is "chk_signature". Note that the
  550.             signature string is case sensitive and spaces do count.
  551.             This string must match the string embedded in SIGNATUR.H.
  552.     
  553.          /us=XXX
  554.     
  555.             Reserve XXX bytes of user data in the blockade reserved 
  556.             area. You must use this option if you intend to add user
  557.             data to the program skeleton prior to branding it.
  558.     
  559.             You may reserve room for user data but are not required to 
  560.             add it when you brand your program.
  561.          
  562.             You may wish to stuff additional info into this region
  563.             such as serial numbers or owner's names.
  564.          
  565.             The maximum user space you may spec is 31,000 bytes.
  566.     
  567.     
  568.          /o=OUTPUT FILENAME
  569.     
  570.             The filename to use in case you don't like SIGNATUR.H.
  571.     
  572.     
  573.          EXAMPLE:
  574.     
  575.              MKSIG  "Brown Fox"  /us=128  /o=BROWN.H
  576.     
  577.           Build a signature array data statement with a signature string
  578.           of "Brown Fox".  Add enough chars to hold 128 bytes of user 
  579.           data.  Write the output to BROWN.H.  The output file is 
  580.           overwritten if it already exists.
  581.     
  582.     
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -10-
  590.  
  591.     
  592.     
  593.          BRAND.EXE
  594.     
  595.          This is the program used to "brand" your program with the
  596.          self-checking info needed at run time. You must BRAND your
  597.          program prior to distributing the program.
  598.     
  599.          Brand's syntax is as follows:
  600.     
  601.          BRAND   filename[.exe]  </s=signature_string> </n> </c>
  602.                                  </uf=USER_FILENAME>
  603.                                  </us=USER DATA STRING>
  604.     
  605.          filename
  606.             The name of the file to brand. The extension .EXE is assumed
  607.             if no extension is specified.  Note that only executable
  608.             programs may be branded since the location of the checking
  609.             information is made known to blockade() function only during
  610.             linking.
  611.     
  612.          /uf=USER_FILENAME
  613.     
  614.             Before branding, read the file USER_FILENAME and place the 
  615.             contents of the file into the user space reserved when you 
  616.             ran MKSIG.  This is the preferred method since both 
  617.             printable and binary chars may be inserted.
  618.             This switch and the /us switch may not be used together.
  619.          
  620.          /us=STRING
  621.     
  622.             Before branding, insert "STRING" into the user space 
  623.             reserved when you ran MKSIG.  Note that there can be no 
  624.             spaces in STRING (sorry, the arg parser doesn't allow it).
  625.             This switch and the /uf switch may not be used together.
  626.          
  627.          /s=signature_string (optional)
  628.     
  629.             Specifies the character string to look for. This string
  630.             must occur only once in your executable program.
  631.             The signature IS case sensitive.
  632.             The default string is "chk_signature". It must match the
  633.             string embedded in SIGNATUR.H.
  634.     
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -11-
  649.  
  650.          
  651.          
  652.          BRAND.EXE (cont.)
  653.     
  654.     
  655.          /n   (optional)
  656.     
  657.            Tells Brand not to verify the check value immediately after
  658.            it is calculated.  Using this option speeds the BRAND process
  659.            by  about 40%.  I recommend you use it once you feel
  660.            comfortable with BRAND's operation.
  661.     
  662.          
  663.          /c=function  (optional, full version only)
  664.     
  665.            Specifies that BRAND use 1 of 3 (currently) available self
  666.            checking algorithms to brand the program.  The full version
  667.            of BLOCKADE allows you to specify at link time the algorithm
  668.            you desire to use. The specification handed to BRAND via
  669.            this switch must match that used in your program, else your
  670.            blockade() function will think your executable has been
  671.            altered.
  672.     
  673.          /a  (optional)
  674.     
  675.            "Abort on any excuse."  This switch will cause BRAND to abort 
  676.            if any processing anomoly occurs, even if the error is only
  677.            warning level in nature.  For example, normally BRAND will 
  678.            beep but continue processing if your SIGNATUR.H file contains 
  679.            room for a user data string but you fail to specify one when 
  680.            you run BRAND.   If this switch is set, Brand will abort, 
  681.            assuming that you need that data if your program is to be 
  682.            right.
  683.     
  684.     
  685.           Brand will terminate with the following error levels if an error 
  686.           occurs.
  687.                1 = brand's own BLOCKADE() call returned an error.
  688.                2 = some notable but not fatal logic error
  689.                    or illogical data was passed to it.
  690.                3 = a severe error. Your program was probably not
  691.                    branded properly. 
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -12-
  708.  
  709.     
  710.     
  711.           SUPPORT
  712.     
  713.           Indusoft Corp. can be contacted as follows:
  714.     
  715.           Phone:  (803)-292-1807.
  716.                   Please leave name, phone (including area code),
  717.                   and times when you can be reached.
  718.                   Sorry, I must call COLLECT.
  719.     
  720.           Compuserve ID:  73517,1107
  721.                   I check for mail every couple of days.
  722.                   This is the preferred method.
  723.     
  724.           Prodigy ID:  GHVR03A
  725.                   I check for mail every couple of days.
  726.     
  727.     
  728.     
  729.          TERMS OF USE
  730.     
  731.          BLOCKADE is supplied for personal, private use.  Feel free to
  732.          distribute the non-registered version of BLOCKADE given these
  733.          restrictions:
  734.     
  735.          -  The program shall be supplied in its original, unmodified
  736.             form, which includes this documentation.
  737.     
  738.          -  No fee is charged other than media materials.
  739.     
  740.          -  Commercial use without a license is prohibited.
  741.     
  742.          -  No component of this package may be included, or bundled
  743.             with other  goods or services.  Exceptions may be granted
  744.             upon written request only.  This restriction also applies
  745.             to distributors, and shareware outlets.
  746.  
  747.  
  748.  
  749.  
  750.  
  751.  
  752.  
  753.  
  754.  
  755.  
  756.  
  757.  
  758.  
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -13-
  767.  
  768.     
  769.     
  770.          WARRANTY
  771.     
  772.          This program is provided AS IS without any warranty, expressed
  773.          or implied, including but not limited to the program's
  774.          suitability for any specific purpose.  Considerable testing
  775.          effort has been expended in BLOCKADE's development, but the
  776.          user is responsible for determining the program's suitability
  777.          for use.  The user assumes full risk as to the results of using
  778.          this package.  In no event shall Indusoft be liable for any
  779.          consequential damages arising from the use, or inability to use
  780.          these routines.
  781.     
  782.          The idea of shareware with its low cost distribution of quality
  783.          programs can be of great value to computer users.  BLOCKADE
  784.          follows in that tradition.
  785.     
  786.                           THANK YOU FOR YOUR SUPPORT!
  787.     
  788.     
  789.     
  790.     
  791.          -------------------- REGISTRATION BENEFITS ------------------------
  792.     
  793.     
  794.          Registration allows Indusoft to continue improving BLOCKADE and
  795.          to develop new products for the computing community.  Future
  796.          improvements for BLOCKADE include..
  797.     
  798.          *  Adding serial numbers or other data after linking. This will
  799.             allow you to have a plain vanilla EXE file which you customize
  800.             prior to shipment.  (COMPLETED in release 2).
  801.     
  802.          *  The ability to embed codes for multiple files, allowing a
  803.             master program to check both itself and subordinates.
  804.     
  805.          *  Ideas that you, my customers submit.
  806.     
  807.          Blockade registration only comes in 2 versions, described below:
  808.     
  809.          License to use the current and all future
  810.          shareware versions for private use ...................... $ 10
  811.     
  812.          License for business and commercial use,
  813.          (includes full source code and license to
  814.           embed object code in your product)  .................... $ 30
  815.     
  816.     
  817.          Please make checks or money orders payable to:
  818.     
  819.                          Indusoft Corp.
  820.                          PO Box 26747
  821.                       Greenville, SC  29616-1747
  822.  
  823.  
  824.  
  825.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -14-
  826.  
  827.     
  828.     
  829.                        REGISTRATION - ORDER FORM
  830.                       ============================
  831.     
  832.     
  833.     
  834.          Please Register BLOCKADE as follows:
  835.     
  836.     
  837.                       Shareware version  ($10.00)   ______
  838.     
  839.                       Commercial version ($30.00)   ______
  840.     
  841.     
  842.          Send applicable material to:
  843.     
  844.          Name: ___________________________________  Phone:_____________
  845.     
  846.          Company: _____________________________________________________
  847.     
  848.          Address: _____________________________________________________
  849.     
  850.          Address: _____________________________________________________
  851.     
  852.          City, State, Zip: ____________________________________________
  853.     
  854.     
  855.          Please specify compiler & version you are using:
  856.          
  857.          Turbo C _____  Turbo/Borland C++ _____   Microsoft C _____
  858.          
  859.     
  860.          Where did you learn about our program?
  861.     
  862.          ______________________________________________________________
  863.     
  864.          What products are you using BLOCKADE for?
  865.     
  866.          ______________________________________________________________
  867.     
  868.          How can we improve BLOCKADE?
  869.     
  870.          ______________________________________________________________
  871.     
  872.          ______________________________________________________________
  873.     
  874.          ______________________________________________________________
  875.     
  876.     
  877.          Please forward check or money order payable to:
  878.     
  879.                           Indusoft Corp.
  880.                           PO Box  26747
  881.                        Greenville, SC  29616-1747
  882.     
  883.  
  884.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -15-
  885.  
  886.     
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898.  
  899.  
  900.  
  901.  
  902.  
  903.  
  904.  
  905.  
  906.  
  907.  
  908.  
  909.  
  910.  
  911.  
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.  
  932.  
  933.  
  934.  
  935.  
  936.  
  937.  
  938.  
  939.  
  940.  
  941.  
  942.  
  943.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -16-
  944.  
  945.  
  946.  
  947.          ----------------end-of-author's-documentation---------------
  948.  
  949.                          Software Library Information:
  950.  
  951.                     This disk copy provided as a service of
  952.  
  953.                            Public (software) Library
  954.  
  955.          We are not the authors of this program, nor are we associated
  956.          with the author in any way other than as a distributor of the
  957.          program in accordance with the author's terms of distribution.
  958.  
  959.          Please direct shareware payments and specific questions about
  960.          this program to the author of the program, whose name appears
  961.          elsewhere in  this documentation. If you have trouble getting
  962.          in touch with the author,  we will do whatever we can to help
  963.          you with your questions. All programs have been tested and do
  964.          run.  To report problems,  please use the form that is in the
  965.          file PROBLEM.DOC on many of our disks or in other written for-
  966.          mat with screen printouts, if possible.  PsL cannot debug pro-
  967.          programs over the telephone, though we can answer questions.
  968.  
  969.          Disks in the PsL are updated  monthly,  so if you did not get
  970.          this disk directly from the PsL, you should be aware that the
  971.          files in this set may no longer be the current versions. Also,
  972.          if you got this disk from another vendor and are having prob-
  973.          lems,  be aware that  some files may have become corrupted or
  974.          lost by that vendor. Get a current, working disk from PsL.
  975.  
  976.          For a copy of the latest monthly software library newsletter
  977.          and a list of the 4,000+ disks in the library, call or write
  978.  
  979.                            Public (software) Library
  980.                                P.O.Box 35705 - F
  981.                             Houston, TX 77235-5705
  982.  
  983.                                 1-800-2424-PSL
  984.                              MC/Visa/AmEx/Discover
  985.  
  986.                           Outside of U.S. or in Texas
  987.                           or for general information,
  988.                               Call 1-713-524-6394
  989.  
  990.  
  991.